// function Car() {}
// let car = new Car()
// console.log(Car.prototype);
// console.log(car);
//原型本身也有自己的原型

// Professor.prototype.tSkill = 'java'
// function Professor() {}
// var professor = new Professor()

// Teacher.prototype = professor
// function Teacher() {
//   this.mSkill = 'js/ts'
// }
// var teacher = new Teacher()

// Student.prototype = teacher
// function Student() {
//   this.pSkill = 'html'
// }
// var student = new Student()
// console.log(student);

// 沿着proto一层一层去原型上找 => 原型链
// 每个proto都有顶端 他的终点是Object.prototype,object.prototype内就没有protp了
// Object.create(对象，null) 创建对象，指定原型
function Obj() {}
Obj.prototype.num = 1
var obj1 = Object.create(Obj.prototype)
var obj2 = new Obj()
// 实例化obj2
// 调用构造函数obj的初始化属性和方法
// 指定实例化对象的原型    
console.log(obj1);
console.log(obj2);


// 不是所有对象都继承与Object.prototype    Object.create(null)

// __proto__ 可以更改但是不能自置
// 包装类的prototype.toString 是重写过的


// call/apply
// function test() {
//   console.log('a');
// }
// test.call()

function Car(brand, color) {
  this.brand = brand
  this.color = color
}

var newCar = {
  displacement: '3.0'
}

// Car.call(newCar,'benz','red') // call 更改了this的指向
Car.apply(newCar,['benz','red'])
console.log(newCar);

